// 导入所需的依赖
import * as XLSX from 'xlsx';

/**
 *
 //导包方式
 import {processFiles,ExcelPerms } from '/@/views/utils/excelUitl';

 //使用方法
 const ExcelList = ref<ExcelPerms[]>([
	{excelName:"客户名称",name:"custName"},
	{excelName:"客户联系方式",name:"custPhone"}
])
function aa(){
	processFiles(file,ExcelList.value).then((val)=>{
		console.log('val',val);
	})
}
 */


/**excel 读取规范 */
export interface ExcelPerms {
  excelName: string //excel要获取的名称
  name : string //名称对应的变量名
}

// 定义一个方法，接受文件并匹配字符串旁边的值
/**
 * 解析Excel文件，根据需要匹配的字符串返回对象与对象值
 */
export const processFiles = (file: File, searchArray:Array<ExcelPerms>): Promise<any[]> => {
  return new Promise((resolve, reject) => {
    // 创建 FileReader 对象并读取文件内容
    const reader: FileReader = new FileReader();
    // console.log(2);
    // console.log(reader);
    
    reader.onload = (e: ProgressEvent<FileReader>) => {
      // console.log(3);
      const result: ArrayBuffer | null = e.target?.result as ArrayBuffer | null;
      
      if (result) {
        let returnExcelArray = new Map 
        // 将 ArrayBuffer 转换为 Uint8Array
        const data: Uint8Array = new Uint8Array(result);

        // 读取 Excel 文件
        const workbook: XLSX.WorkBook = XLSX.read(data, { type: 'array',cellDates:true });
        const sheetName: string = workbook.SheetNames[0];
        const worksheet: XLSX.WorkSheet = workbook.Sheets[sheetName];

        // 将 Excel 数据转换为 JSON 对象
        const jsonData: any[] = XLSX.utils.sheet_to_json(worksheet, { header: 1 });

        // 查找目标字符串并获取旁边的值
        const matchingValues: any[] = [];
        
        searchArray.forEach(searchString => {
          for (let rowIndex = 0; rowIndex < jsonData.length; rowIndex++) {
            const row: any[] = jsonData[rowIndex];
            const columnIndex: number = row.indexOf(searchString.excelName);
            // console.log("searchString=",searchString);
            
            if (columnIndex !== -1 && columnIndex + 1 < row.length) {
              if((row[columnIndex + 1]) instanceof Date){// 判断值是否为日期类型
                var a =row[columnIndex + 1];
                a.setTime(a.getTime() + 43 * 1000); // 补上时间差
                console.log(a)
                returnExcelArray.set(searchString.name,a.toISOString())
              }else{
                returnExcelArray.set(searchString.name,row[columnIndex + 1])
              }
              // console.log(searchString.name,row[columnIndex + 1]);
              // console.log();
              
              // console.log(returnExcelArray);
              
            }
          }
        });

        // 返回匹配的结果
        resolve(Object.fromEntries(returnExcelArray))
      } else {
        reject(new Error("Failed to read file"));
      }
    };

    // 读取文件内容
    reader.readAsArrayBuffer(file);
  });
};

/**检查类型 */
const convertTime = (value: string | number | Date) => {
  // 检查变量类型，如果是时间类型，将Excel中的时间转换为JavaScript的日期对象
  if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(value)) {
    console.log(9999999);
    
    return new Date(value);
  } else {
    return value;
  }
}
/**定义一个函数，将源对象的属性值复制到目标对象中
 * source赋值过去的，
 * target被赋值的
*/
export const copyProperties = (source: any, target: any): void => {
  for (const key in source) {
    // 检查目标对象是否具有相同的属性名
    if (target.hasOwnProperty(key)) {
      // 如果属性值是对象，则递归调用copyProperties函数
      if (typeof source[key] === 'object' && typeof target[key] === 'object') {
        copyProperties(source[key], target[key]);
      } else {
        // 否则直接赋值给目标对象的属性
        target[key] = source[key];
      }
    }
  }
};

// // 定义一个方法，接受文件并匹配字符串旁边的值
// export const processFile = (file: File, searchString: string): Promise<any[]> => {
//   return new Promise((resolve, reject) => {
//     // 创建 FileReader 对象并读取文件内容
//     const reader: FileReader = new FileReader();
//     // console.log(2);
//     // console.log(reader);
    
//     reader.onload = (e: ProgressEvent<FileReader>) => {
//       // console.log(3);
//       const result: ArrayBuffer | null = e.target?.result as ArrayBuffer | null;
      
//       if (result) {
//         // 将 ArrayBuffer 转换为 Uint8Array
//         const data: Uint8Array = new Uint8Array(result);

//         // 读取 Excel 文件
//         const workbook: XLSX.WorkBook = XLSX.read(data, { type: 'array' });
//         const sheetName: string = workbook.SheetNames[0];
//         const worksheet: XLSX.WorkSheet = workbook.Sheets[sheetName];

//         // 将 Excel 数据转换为 JSON 对象
//         const jsonData: any[] = XLSX.utils.sheet_to_json(worksheet, { header: 1 });

//         // 查找目标字符串并获取旁边的值
//         const matchingValues: any[] = [];
//         for (let rowIndex = 0; rowIndex < jsonData.length; rowIndex++) {
//           const row: any[] = jsonData[rowIndex];
//           const columnIndex: number = row.indexOf(searchString);
//           // console.log("searchString=",searchString);
          
//           if (columnIndex !== -1 && columnIndex + 1 < row.length) {
//             matchingValues.push(row[columnIndex + 1]);
//             // console.log("9",matchingValues);
            
//           }
//         }

//         // 返回匹配的结果
//         resolve(matchingValues);
//       } else {
//         reject(new Error("Failed to read file"));
//       }
//     };

//     // 读取文件内容
//     reader.readAsArrayBuffer(file);
//   });
// };